home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari Mega Archive 2
/
Atari Mega Archive CD - Volume 2.iso
/
8bit
/
cislib_a
/
mfwb.act
< prev
next >
Wrap
Text File
|
1995-04-22
|
8KB
|
602 lines
;More Fun With BOUNCE
;by Joel Gluck
;for ANALOG COMPUTING
BYTE ARRAY xx(256),yy(256),
xd(256),yd(256)
BYTE xc,yc,hidden,cmode,TIME=20,
RANDOM=53770,CONSOL=53279,
CURSC=708,CH=764,NEWCOL=710,
dist=[0],audball=[0]
CARD num=[0],curspeed=[1500],
ballspeed=[900]
CARD ARRAY linept(48)
PROC gr5init()
CARD scrn=88
BYTE line,BALLCOL=709,WALLCOL=710
Graphics(5)
FOR line=0 TO 47 DO
linept(line)=scrn+20*line
OD
BALLCOL=$0C
WALLCOL=$94
RETURN
PROC plot5(BYTE x,y,col)
BYTE POINTER pixel
BYTE ARRAY colfil= [0 85 170 255],
mask= [63 207 243 252],
mask2= [192 48 12 3]
pixel = linept(y)+(x RSH 2)
pixel^ = pixel^ & mask(x & 3)
% (colfil(col)
& mask2(x & 3))
RETURN
BYTE FUNC locate5(BYTE x,y)
BYTE POINTER pixel
BYTE ARRAY mask= [192 48 12 3]
pixel = linept(y)+(x RSH 2)
RETURN((pixel^ & mask(x & 3)) RSH
(((x & 3) XOR 3) LSH 1))
PROC hline(BYTE y,c)
BYTE i
FOR i = 0 TO 79 DO
plot5(i,y,c)
OD
RETURN
PROC vline(BYTE x,c)
BYTE i
FOR i = 0 TO 47 DO
plot5(x,i,c)
OD
RETURN
PROC pauz(CARD p)
CARD i
FOR i=1 TO p DO
OD
RETURN
PROC f16(BYTE x,y)
BYTE g,a,b
g=Locate(x,y)
IF g=32 THEN
RETURN
FI
g==+128
NEWCOL=15
b=y
DO
color=0
Plot(x,b)
b==-1
color=g
Plot(x,b)
IF b=2 THEN
EXIT
FI
Sound(0,b,8,8)
pauz(700+x*50)
OD
a=x
DO
color=0
Plot(a,b)
a==+1
color=g
Plot(a,b)
IF a=19 THEN
EXIT
FI
Sound(0,a,8,8)
pauz(700+x*50)
OD
color=0
Plot(a,b)
SndRst()
RETURN
PROC colburst(BYTE x,y)
BYTE g,c,a
g=Locate(x,y)
IF g=32 THEN
RETURN
FI
g=g+128
NEWCOL=(Rand(16) LSH 4) % 10
color=g
a=x-1
IF a>13 THEN
a=0
FI
Plot(x,a)
DrawTo(x,y)
FOR c=0 TO 15 DO
Sound(0,0,4,15-c)
pauz(400)
OD
color=0
Plot(x,0)
DrawTo(x,y)
SndRst()
RETURN
PROC dropkick(BYTE x,y)
BYTE g,h,a,b
g=Locate(x,y)
IF g=32 THEN
RETURN
FI
g==+128
NEWCOL=152
b=y
DO
color=0
Plot(x,b)
b==+1
color=g
Plot(x,b)
IF b=23 THEN
EXIT
FI
Sound(0,b+10+(x LSH 1),10,8)
Sound(1,b+20+(x LSH 1),10,8)
pauz(400)
OD
SndRst()
h=0
NEWCOL=159
a=x
DO
color=h
Plot(a,b)
h=Locate(a+1,b-1)
a==+1
b==-1
color=g
Plot(a,b)
IF a=18 OR b=1 THEN
EXIT
FI
Sound(0,a-x,8,(b RSH 1))
pauz(800)
OD
color=0
Plot(a,b)
SndRst()
RETURN
PROC foo()
BYTE v
FOR v=0 TO 15 DO
Sound(0,255,10,15-v)
Sound(1,0,8,8-(v RSH 1))
pauz(500)
OD
SndRst()
RETURN
PROC intro()
BYTE x
Graphics(17)
CURSC=$08
Position(0,10)
PrintD(6,"MORE FUN WITH")
Position(0,12)
PrintD(6,"B O U N C E !")
Position(0,14)
PrintD(6,"BY JOEL GLUCK")
pauz(65000)
pauz(65000)
pauz(65000)
FOR x=0 TO 12 DO
f16(12-x,10)
OD
FOR x=0 TO 12 DO
colburst(x,12)
OD
FOR x=0 TO 12 DO
dropkick(12-x,14)
OD
CURSC=$48
Position(14,1)
PrintD(6,"ANALOG")
foo()
Position(11,3)
PrintD(6,"COMPUTING")
foo()
Position(12,5)
PrintD(6,"FEBRUARY")
foo()
Position(16,7)
PrintD(6,"1985")
foo()
pauz(65000)
pauz(65000)
pauz(65000)
RETURN
PROC drawdoc()
BYTE CURS=752
CURS=1
PutE()
Print("Use joystick and ")
PrintE("SPACE to draw/erase.")
Print("Hit B for balls, ")
PrintE("0-9 for brush speed.")
Print("ESC clrs balls; ")
PrintE("ctrl-ESC clrs screen.")
Print("Press START to Bounce!")
RETURN
PROC clearscrn()
BYTE a,b,g
FOR b=1 TO 19 DO
FOR a=1 TO 78 DO
g=locate5(a,b)
IF (g=2 OR CH>28) AND g>1 THEN
plot5(a,b,0)
Sound(0,b,6,4)
IF CH=28 THEN
pauz(300)
FI
FI
g=locate5(a,39-b)
IF (g=2 OR CH>28) AND g>1 THEN
plot5(a,39-b,0)
Sound(0,b,6,4)
IF CH=28 THEN
pauz(300)
FI
FI
OD
Sound(0,0,0,0)
OD
IF CH>28 OR hidden=2 THEN
hidden=0
FI
RETURN
PROC movecursor(BYTE bflag)
BYTE g,STIK=632,TRIG=644,vol
BYTE ARRAY v=[2 2 2 0 2 1 1 1 0 2 0
0 0 1 1 1 1 2 1 0 1 1]
INT cxd,cyd
IF STIK<15 OR bflag=1 THEN
cxd=v((STIK-5) LSH 1)-1
cyd=v(((STIK-5) LSH 1) % 1)-1
IF bflag=1 THEN
cxd=2
FI
g=hidden
IF TRIG THEN
vol=4
ELSE
vol=10
g=cmode*3
FI
Sound(0,(xc+yc)*cmode,
8+(cmode LSH 1),
vol-(cmode LSH 1))
plot5(xc,yc,g)
xc==+cxd
yc==+cyd
IF xc<1 THEN
xc=78
FI
IF xc>78 THEN
xc=1
FI
IF yc<1 THEN
yc=38
FI
IF yc>38 THEN
yc=1
FI
hidden=locate5(xc,yc)
plot5(xc,yc,1)
FI
RETURN
PROC audlayball()
BYTE i,j,k
FOR j=0 TO 2 DO
FOR i=j*50 TO j*50+20 DO
Sound(0,i,10,15-j*6)
pauz(100)
OD
OD
Sound(0,0,0,0)
RETURN
BYTE FUNC number()
BYTE n,v
v=CH
Open(2,"K:",4,1)
n=GetD(2)
Close(2)
CH=v
IF n>47 AND n<58 THEN
RETURN(57-n)
ELSE
RETURN(99)
FI
PROC audcmode()
BYTE n
FOR n=1 TO 5 DO
IF cmode THEN
Sound(0,100-n*10,10,4)
ELSE
Sound(1,150-n*10,10,4)
Sound(0,5-n,8,6)
FI
pauz(2000)
SndRst()
pauz(1000)
OD
RETURN
PROC cursor()
BYTE n
IF CH<>255 THEN
IF CH=33 THEN
cmode==XOR 1
audcmode()
ELSEIF CH=28 OR CH=156 THEN
clearscrn()
ELSEIF CH=21 THEN
hidden=2
plot5(xc,yc,2)
movecursor(1)
audlayball()
ELSE
n=number()
IF n<99 THEN
curspeed=n*500
FI
FI
CH=255
FI
movecursor(0)
RETURN
PROC bouncedoc()
CARD n
PutE()
n=num
IF n=1 THEN
PrintE("1 ball is bouncing.")
ELSE
PrintC(n)
PrintE(" balls are bouncing.")
FI
PrintE("Hit digits 0-9 for speed.")
Print("S changes sound focus, ")
PrintE("N nudges ball.")
Print("Press SELECT to Draw again.")
RETURN
PROC process(BYTE a,b)
BYTE g
g=locate5(a,b)
IF g=2 THEN
IF num<200 THEN
xx(num)=a
yy(num)=b
num==+1
ELSE
plot5(a,b,0)
FI
ELSEIF g=0 THEN
plot5(a,b,1)
FI
RETURN
PROC ballinit()
BYTE a,b
CURSC=$44
num=0
FOR b=1 TO 19 DO
FOR a=1 TO 78 DO
process(a,b)
process(a,39-b)
OD
OD
FOR a=0 TO num DO
xd(a)=Rand(2) LSH 1
yd(a)=Rand(2) LSH 1
OD
RETURN
PROC moveball(BYTE n)
BYTE g,pa,pb
g=locate5(xx(n)+xd(n)-1,yy(n)+yd(n)-1)
IF g<2 THEN
plot5(xx(n),yy(n),0)
xx(n)=xx(n)+xd(n)-1
yy(n)=yy(n)+yd(n)-1
plot5(xx(n),yy(n),2)
IF n=audball THEN
dist==+1
FI
RETURN
ELSE
pb=locate5(xx(n),yy(n)+yd(n)-1)
pa=locate5(xx(n)+xd(n)-1,yy(n))
IF n=audball THEN
IF dist THEN
Sound(0,170-((38-dist) LSH 2),
10,8)
Sound(1,((38-dist) LSH 2),
10,8)
FI
dist=0
TIME=0
FI
IF pa>1 THEN
xd(n)=2-xd(n)
IF pb>1 THEN
yd(n)=2-yd(n)
RETURN
ELSE
plot5(xx(n),yy(n),0)
yy(n)=yy(n)+yd(n)-1
plot5(xx(n),yy(n),2)
RETURN
FI
ELSEIF pb>1 THEN
yd(n)=2-yd(n)
plot5(xx(n),yy(n),0)
xx(n)=xx(n)+xd(n)-1
plot5(xx(n),yy(n),2)
RETURN
ELSEIF Rand(2) THEN
xd(n)=2-xd(n)
ELSE
yd(n)=2-yd(n)
RETURN
FI
FI
RETURN
PROC cleanup()
BYTE a,b
FOR b=1 TO 19 DO
FOR a=1 TO 78 DO
IF locate5(a,b)=1 THEN
plot5(a,b,0)
FI
IF locate5(a,39-b)=1 THEN
plot5(a,39-b,0)
FI
OD
OD
RETURN
PROC bounce()
CARD i
BYTE n
ballinit()
bouncedoc()
audball=0
dist=0
IF num THEN
DO
FOR i=0 TO num-1 DO
moveball(i)
IF CH<>255 THEN
IF CH=62 THEN
audball==+1
IF audball=num THEN
audball=0
FI
dist=0
ELSEIF CH=35 THEN
xd(audball)=2-xd(audball)
ELSE
n=number()
IF n<99 THEN
ballspeed=n*n*100
FI
FI
CH=255
FI
IF CONSOL=5 THEN
EXIT
FI
OD
pauz(ballspeed)
IF TIME THEN
SndRst()
FI
UNTIL CONSOL=5
OD
SndRst()
FI
cleanup()
RETURN
PROC MFWB()
intro()
gr5init()
hline(0,3)
hline(39,3)
vline(0,3)
vline(79,3)
DO
drawdoc()
xc=39
yc=19
hidden=locate5(xc,yc)
cmode=1
plot5(xc,yc,1)
DO
cursor()
CURSC=TIME
pauz(curs